from jsonpath import jsonpath
from loguru import logger
from tools.handle_global_variable import GlobalVariable


def from_actual_results_extract_data(act_res, ext_exp):
    """

    :param act_res: 实际请求响应结果
    :param ext_exp: 提取表达式：读取excel里面extract_data一行的数据
    :return:
    """
    # 判断实际请求响应结果数据 和 提取表达式数据是否存在，存在则进行下一步
    if act_res and ext_exp:
        # 转化数据格式
        ext_exp_dict = eval(ext_exp)
        logger.info(f"转化后的提取表达式为:{ext_exp_dict}")
        # 遍历转化后的数据，
        for key, value in ext_exp_dict.items():
            # 从实际结果过提取数据, 数据类型为列表
            extract_data = jsonpath(act_res, value)
            logger.info(f"开始提取数据, 从实际结果中, 提取的数据为:{extract_data}")
            # 提取出来的数据添加到全部变量类当中
            setattr(GlobalVariable, key, extract_data[0])
        logger.info(f"提取后的全部变量类中的数据为:{GlobalVariable.__dict__}")

    else:
        logger.exception(f"实际结果{act_res}或者提取表达式{ext_exp}不存在，请检查输入结果")


if __name__ == '__main__':
    act_res = {
        "code": "1008",
        "msg": "注册失败，手机号码已被使用！",
        "data": None
    }

    ext_exp = '{"verification_code":"$.data","code":"$.code"}'

    from_actual_results_extract_data(act_res, ext_exp)
